// pages/i/score-log.js
const cardService = require('../../services/card.js');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    logList: [], // 积分日志列表
    loading: false, // 加载状态
    refreshing: false, // 下拉刷新状态
    hasMore: true, // 是否有更多数据
    page: 1, // 当前页码
    pageSize: 10, // 每页数量
    total: 0, // 总数量
    emptyText: '暂无积分记录' // 空状态文本
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadScoreLogs(true);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时刷新数据
    this.loadScoreLogs(true);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.loadScoreLogs(true);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (this.data.hasMore && !this.data.loading) {
      this.loadScoreLogs(false);
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 加载积分日志列表
   * @param {boolean} refresh 是否刷新（重置页码）
   */
  async loadScoreLogs(refresh = false) {
    if (this.data.loading) return;

    const page = refresh ? 1 : this.data.page;

    this.setData({
      loading: true,
      refreshing: refresh
    });

    try {
      const result = await cardService.getScoreLogs({
        page: page,
        pageSize: this.data.pageSize,
        showLoading: false
      });

      if (result.success) {
        const { list, total, current_page, last_page } = result.data;

        // 处理日志数据
        const processedList = list.map(item => ({
          ...item,
          // 格式化时间
          created_at_text: item.created_at_text || this.formatTime(item.created_at),
          // 积分显示样式
          score_class: this.getScoreClass(item),
          // 积分显示文本
          score_text: this.getScoreText(item),
          // 操作类型显示
          action_text: item.action_text || '未知操作'
        }));

        this.setData({
          logList: refresh ? processedList : [...this.data.logList, ...processedList],
          page: current_page + 1,
          total: total,
          hasMore: current_page < last_page,
          loading: false,
          refreshing: false
        });

        // 停止下拉刷新
        if (refresh) {
          wx.stopPullDownRefresh();
        }
      } else {
        wx.showToast({
          title: result.message || '获取积分日志失败',
          icon: 'none'
        });
        this.setData({
          loading: false,
          refreshing: false
        });
      }
    } catch (error) {
      console.error('加载积分日志失败:', error);
      wx.showToast({
        title: '网络错误，请重试',
        icon: 'none'
      });

      this.setData({
        loading: false,
        refreshing: false
      });
    }
  },

  /**
   * 格式化时间
   * @param {number} timestamp 时间戳
   * @returns {string} 格式化后的时间
   */
  formatTime(timestamp) {
    if (!timestamp) return '';
    const date = new Date(timestamp * 1000);
    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
  },

  /**
   * 获取积分样式类
   * @param {Object} item 日志项
   * @returns {string} 样式类名
   */
  getScoreClass(item) {
    if (item.dir === 1) {
      return 'score-in'; // 收入
    } else if (item.dir === 2) {
      return 'score-out'; // 支出
    }
    return 'score-neutral'; // 中性
  },

  /**
   * 获取积分显示文本
   * @param {Object} item 日志项
   * @returns {string} 积分显示文本
   */
  getScoreText(item) {
    const score = parseFloat(item.score);
    if (item.dir === 1) {
      return `+${score}`; // 收入显示正号
    } else if (item.dir === 2) {
      return `-${score}`; // 支出显示负号
    }
    return `${score}`; // 中性显示
  },

  /**
   * 重新加载数据
   */
  onReload() {
    this.loadScoreLogs(true);
  }
})